using System;
using EnvDTE;

namespace NUnitGenAddIn.Core.Test
{
    /// <summary>
    /// Mock Code Namespace
    /// </summary>
	public class MockCodeNamespace : MockCodeElement, CodeNamespace
	{
        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeNamespace"/> class.
        /// </summary>
        /// <param name="_name">The _name.</param>
		public MockCodeNamespace(string _name) : base(_name)
		{}

        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeNamespace"/> class.
        /// </summary>
        /// <param name="_name">The _name.</param>
        /// <param name="children">The children.</param>
		public MockCodeNamespace(string _name, CodeElements children) : base(_name, children)
		{}

		#region CodeNamespace Members

        /// <summary>
        /// Adds the class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Position">The position.</param>
        /// <param name="Bases">The bases.</param>
        /// <param name="ImplementedInterfaces">The implemented interfaces.</param>
        /// <param name="Access">The access.</param>
        /// <returns></returns>
		public CodeClass AddClass(string name, object Position, object Bases, object ImplementedInterfaces, vsCMAccess Access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the delegate.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Type">The type.</param>
        /// <param name="Position">The position.</param>
        /// <param name="Access">The access.</param>
        /// <returns></returns>
		public CodeDelegate AddDelegate(string name, object Type, object Position, vsCMAccess Access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the enum.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Position">The position.</param>
        /// <param name="Bases">The bases.</param>
        /// <param name="Access">The access.</param>
        /// <returns></returns>
		public CodeEnum AddEnum(string name, object Position, object Bases, vsCMAccess Access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the interface.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Position">The position.</param>
        /// <param name="Bases">The bases.</param>
        /// <param name="Access">The access.</param>
        /// <returns></returns>
		public CodeInterface AddInterface(string name, object Position, object Bases, vsCMAccess Access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the namespace.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Position">The position.</param>
        /// <returns></returns>
		public CodeNamespace AddNamespace(string name, object Position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the struct.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Position">The position.</param>
        /// <param name="Bases">The bases.</param>
        /// <param name="ImplementedInterfaces">The implemented interfaces.</param>
        /// <param name="Access">The access.</param>
        /// <returns></returns>
		public CodeStruct AddStruct(string name, object Position, object Bases, object ImplementedInterfaces,
		                            vsCMAccess Access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets or sets the comment.
        /// </summary>
        /// <value>The comment.</value>
		public string Comment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the doc comment.
        /// </summary>
        /// <value>The doc comment.</value>
		public string DocComment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the kind.
        /// </summary>
        /// <value>The kind.</value>
		public override vsCMElement Kind
		{
			get { return vsCMElement.vsCMElementNamespace; }
		}

        /// <summary>
        /// Gets the members.
        /// </summary>
        /// <value>The members.</value>
		public CodeElements Members
		{
			get { return children; }
		}

        /// <summary>
        /// Removes the specified element.
        /// </summary>
        /// <param name="Element">The element.</param>
		public void Remove(object Element)
		{
			throw new Exception("The method or operation is not implemented.");
		}

		#endregion
	}
}